#!/usr/bin/env bash

### ### ### ### ### ### ### ### 
### 第一步: 密码复杂度设置   ### 
### ### ### ### ### ### ### ### 

sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS  90/' /etc/login.defs
sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS  0/'  /etc/login.defs
sed -i 's/^PASS_MIN_LEN.*/PASS_MIN_LEN    8/'  /etc/login.defs
sed -i 's/^PASS_WARN_AGE.*/PASS_WARN_AGE  7/'  /etc/login.defs
sed -i 's/^password    requisite.*/password    requisite     pam_cracklib.so minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1/' /etc/pam.d/system-auth

### ### ### ### ### ### ### ### ###
### 第二步：设置登录失败处理功能  ### 
### ### ### ### ### ### ### ### ### 

# 定义文件路径和要添加的行
FILE="/etc/pam.d/system-auth"
LINE="account     required      pam_tally2.so deny=5 even_deny_root unlock_time=900"

# 读取文件内容
CONTENT=$(<"$FILE")
# 找到最后一个 account required 的位置
LAST_ACCOUNT_REQ=$(grep -n 'account     required' ${FILE} | tail -n1 | cut -d: -f1)

if ! `grep "$LINE" "$FILE" > /etc/null` &&  [ -n "$LAST_ACCOUNT_REQ" ]; then
    # 在最后一个 account required 后添加新的行
    sed -i '${LAST_ACCOUNT_REQ}a$LINE' "$FILE"
else
    echo "文件 ${FILE} 中已存在该行或者"account     required"没有匹配到内容，跳过添加"
fi

### ### ### ### ### ### ### ### 
### 第三步：管理终端限制措施 ### 
### ### ### ### ### ### ### ### 

# IP=`ip a | egrep -i '192.168|172.16' | awk -F '/| ' '{print $6}' | head -n 1`
# IP_NET=`echo $IP | awk -F '.' '{print $1"."$2"."$3}'`

# 网络说明：
# 192.168.0.x:    大数据集群
# 192.168.1.x     生产集群
# 192.168.3.x     生产集群
# 192.168.4.x:    大数据集群
# 192.168.16.x:   区块链集群
# 192.168.20.x:   生产28集群
# 172.16.2.x:     开发/测试集群
# 172.16.1.x:     测试/测试集群

echo "sshd: 192.168.0.0/24:  allow"  >> /etc/hosts.allow
echo "sshd: 192.168.1.0/24   allow"  >> /etc/hosts.allow
echo "sshd: 192.168.3.0/24   allow"  >> /etc/hosts.allow
echo "sshd: 192.168.4.0/24   allow"  >> /etc/hosts.allow
echo "sshd: 192.168.10.0/23   allow" >> /etc/hosts.allow
echo "sshd: 192.168.50.0/23   allow" >> /etc/hosts.allow
echo "sshd: 192.168.16.0/24  allow"  >> /etc/hosts.allow
echo "sshd: 192.168.20.0/24  allow"  >> /etc/hosts.allow
echo "sshd: 192.168.101.0/24 allow"  >> /etc/hosts.allow
echo "sshd: 172.16.1.0/24    allow"  >> /etc/hosts.allow
echo "sshd: 172.16.2.0/24    allow"  >> /etc/hosts.allow
echo "sshd: 10.206.0.0/24    allow"  >> /etc/hosts.allow
echo "sshd: 10.207.0.0/24    allow"  >> /etc/hosts.allow
echo "File hosts.allow content:"
grep -v ^# /etc/hosts.allow
echo ""
echo "sshd: ALL" >> /etc/hosts.deny
echo "File hosts.deny content:"
grep -v ^# /etc/hosts.deny



### ### ### ### ### ### ### ### 
### 第四步：会话超时自动退出  ### 
### ### ### ### ### ### ### ### 

TIMEOUT_CONFIG="export TMOUT=600"

if ! `grep "$TIMEOUT_CONFIG" /etc/profile > /etc/null`; then
    # 在最后一个 account required 后添加新的行
    echo "$TIMEOUT_CONFIG" >> /etc/profile
    echo "添加会话超时配置"
else
    echo "已存在会话超时的配置，跳过添加"
fi